class Gloves {
public:
    int findMinimum(int n, vector<int> left, vector<int> right) {
        int sum = 0;
        int leftsum = 0, rightsum = 0;  
        int leftmin = 30, rightmin = 30;
        for(int i = 0; i < n; ++i){
            // 如果一个手套出现了0，那么将导致对应的手套无法被匹配到，所以要把0对应的手套都取出来（防止影响其他结果）
            if(left[i]*right[i] == 0)  
                sum += left[i] + right[i];  //数量为0的手套颜色个数
            else{
                leftsum += left[i];
                rightsum += right[i];
                leftmin = min(left[i], leftmin);
                rightmin = min(right[i], rightmin);
            }
        }
        // 左右两边分别找出能够覆盖全部颜色的最小数量;
        // sum减去最少的颜色数量，再加上一个最小颜色就能够覆盖全部颜色
        int minsum = min(leftsum-leftmin+1, rightsum-rightmin+1);
        //判断左右两边那一边需要拿的数量最小就拿那一边，在另一边随便一只都匹配
        return sum + minsum + 1;
    }
};